package jdk5.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Arrays;

import jdk5.common.Teacher;

/******
 * 
 * @author yejf
 * @since JDK8.0
 * @CreateDate 2020年8月26日 上午11:58:46 
 * @description 此类用来描述了通用性 toString方法
 *
 */
public class StringUtil {

	/************
	 * 
	 * @param obj
	 * @return
	 */
	public static String toString(Object obj) {
		if(null == obj) {
			return "null";
		}
		//
		Class<?> c = obj.getClass();
		//1.获取此类的类名
		String cName = c.getSimpleName();
		//2. 获取此类的所有属性
		Field[] fields = c.getDeclaredFields();
		//
		StringBuilder builder = new StringBuilder();
		builder.append(cName).append("[");
		//3. 迭代
		Arrays.stream(fields)
							.map( (field) -> { field.setAccessible(true); return field;})
							.filter( (field) -> !Modifier.isFinal(field.getModifiers()))
							.forEach((field) -> {
								try {
									builder.append(field.getName())
										.append("=").append(field.get(obj)).append(",");
									
								} catch (Exception e) {
									e.printStackTrace();
								}
							});
		//
		//删除最后一个,号
		builder.deleteCharAt(builder.length()-1);
		builder.append("]");
		return builder.toString();				
	}
	
	public static void main(String[] args) {
		Teacher t = new Teacher("jack");
		System.out.println(t);
		//
		System.out.println(toString(t));
	}
}
